import BaseVenueProcessor from './BaseVenueProcessor.js';
import { getDongChengVenueSettings } from '../request.js';

/**
 * 东城体育公园场地数据处理器
 */
export class DongChengProcessor extends BaseVenueProcessor {
  constructor() {
    super();
    this.venueName = '东城体育公园';
  }

  /**
   * 获取东城体育公园场地预约设置
   * @param {Object} params - 查询参数 { gym_id, type, filter_front_reserve, date }
   * @returns {Promise} 请求Promise
   */
  async getVenueSettings(params = {}) {
    // 设置默认参数
    const defaultParams = {
      gym_id: 1,
      type: 'site',
      filter_front_reserve: 0,
      date: '2025-8-20'
    };
    
    // 合并参数
    const requestData = { ...defaultParams, ...params };
    
    return await getDongChengVenueSettings(requestData);
  }

  /**
   * 验证数据是否有效
   * @param {Object} data - 原始场地数据
   * @returns {boolean} 数据是否有效
   */
  validateData(data) {
    // 处理两种不同的数据格式
    // 格式1: data包含data属性，data属性是数组
    // 格式2: data直接是数组
    const actualData = data.data || data;
    
    return actualData && 
           Array.isArray(actualData) && 
           actualData.length > 0 &&
           actualData[0].site &&
           actualData[0].sch;
  }

  /**
   * 按场地名称分组
   * @param {Object} data - 原始场地数据
   * @returns {Map} 场地Map
   */
  groupVenues(data) {
    const venueMap = new Map();
    
    // 处理两种不同的数据格式
    const actualData = data.data || data;
    
    // 遍历场地数据
    actualData.forEach(item => {
      const venueName = item.site.name;
      if (!venueMap.has(venueName)) {
        venueMap.set(venueName, {
          name: venueName,
          siteId: item.site.id,
          timeSlots: []
        });
      }
    });
    
    return venueMap;
  }

  /**
   * 处理时间槽
   * @param {Map} venueMap - 场地Map
   * @param {Object} data - 原始场地数据
   */
  processTimeSlots(venueMap, data) {
    // 处理两种不同的数据格式
    const actualData = data.data || data;
    
    // 遍历场地数据
    actualData.forEach(item => {
      const venueName = item.site.name;
      const venue = venueMap.get(venueName);
      
      if (venue) {
        // 遍历时间槽信息
        item.sch.forEach(slot => {
          // 检查场地状态
          const isFree = !slot.is_reserved && !slot.is_disabled;
          
          // 添加时间槽信息
          venue.timeSlots.push({
            time: slot.start_time,
            isFree: isFree,
            price: parseFloat(slot.price) || 0,
            beginDatetime: slot.start_time,
            endDatetime: slot.end_time
          });
        });
      }
    });
  }

  /**
   * 转换为场地列表
   * @param {Map} venueMap - 场地Map
   * @returns {Array} 场地列表
   */
  convertToVenueList(venueMap) {
    return Array.from(venueMap.values()).map((venue, index) => {
      // 根据场地名称设置不同的价格
      let price = 40; // 默认价格
      if (venue.name.includes('1号')) {
        price = 30;
      } else if (venue.name.includes('2号')) {
        price = 40;
      } else if (venue.name.includes('3号')) {
        price = 50;
      }
      
      return {
        id: 12000 + index, // 给东城体育公园场地分配ID
        name: venue.name,
        address: '东城体育公园',
        latitude: 23.0489,
        longitude: 113.7447,
        phone: '0769-87654321',
        rating: 4.5,
        price: price,
        facilities: ['室内场地', '专业教练', '器材租赁'],
        image: '',
        distance: 5.5,
        timeSlots: venue.timeSlots,
        dataSource: this.venueName
      };
    });
  }
/**
   * 处理场地数据
   * @param {Object} data - 原始场地数据
   * @returns {Array} 处理后的场地列表
   */
  process(data) {
    // 验证数据
    if (!this.validateData(data)) {
      console.warn('东城体育公园数据无效:', data);
      return [];
    }
    
    // 按场地名称分组
    const venueMap = this.groupVenues(data);
    
    // 处理时间槽
    this.processTimeSlots(venueMap, data);
    
    // 转换为场地列表
    return this.convertToVenueList(venueMap);
  }
}

export default DongChengProcessor;